// user 用户模块下的store

// 读取或写入操作的一个库
import Storage from '../../utils/storage'

// 用户信息本地存储时的名字
const STORAGE_USER_KEY = 'user'
// 考虑到已经登录过的情况，应该先读取本地的登录记录过的数据
let info = Storage.get(STORAGE_USER_KEY)
// console.log('获取数据', info)

// 判断是否能获取到本地存储的数据
info = info || {
  access_token: '',
  account: '',
  add_ip: '',
  add_time: '',
  avatar: '',
  last_ip: '',
  last_time: '',
  nickname: '',
  phone: '',
  role: '',
  status: null,
  uid: null,
  user_role: null,
  token_exp: null,
  token_gen: null

}

const state = {
  info
}

const getters = {
  getUserInfo (state) {
    return state.info
  }
}

const mutations = {
  setUserInfo (state, payload) {
    state.info = payload
  },
  logout (state) {// 退出登录清空用户数据
    state.info = {
      access_token: '',
      account: '',
      add_ip: '',
      add_time: '',
      avatar: '',
      last_ip: '',
      last_time: '',
      nickname: '',
      phone: '',
      role: '',
      status: null,
      uid: null,
      user_role: null,
      token_exp: null,
      token_gen: null

    }
  }
}

const actions = {
  // 保存用户信息
  saveUserInfo (context, payload) {
    // 为了提供外部的异步操作，可以使用Promise
    return new Promise((resolve, reject) => {
      // 1.存储到本地 - 持久化保存（localStorage，sessionStorage，cookie）
      Storage.save(STORAGE_USER_KEY, payload)
      // 2.更新到store仓库
      context.commit('setUserInfo', payload)
      resolve()
    })
  },
  clearUserInfo (context) { // 退出登录时清空信息
    return new Promise((resolve, reject) => {
      // 清空本地用户数据
      Storage.remove(STORAGE_USER_KEY)
      // 清空vuex仓库
      context.commit('logout')
      resolve()
    })
  }
}

export default {
  namespaced: true, // 开启模块的命名空间
  state,
  getters,
  mutations,
  actions
}
